// 导入 http 模块
import http from 'wechat-http'
/**
 * 配置接口基础路径
 */
http.baseURL = 'https://live-api.itheima.net'

// 请求拦截器
http.intercept.request = (options) => {
  // 拦截器处理后的请求参数
  // 加请求头   获取token

  const token = getApp().token
  options.header = {
    // 权限认证
    Authorization: token, // 拼接好了
    // 默认头信息     展开运算符 ...      { name: 'zs', age: 19 }
    ...options.header,
    // name: 'zs',
    // age: 19
  }
  return options
}
/**
 * 配置响应拦截器 => 服务器返回响应的数据 都会先经过这里处理好之后 再交给页面中
 */
http.intercept.response = async ({ data, statusCode, config }) => {
  // res 就是后端返回的原始数据
  console.log(config.url, 999) // 请求的地址
  // res.statusCode  状态码     处理401

  // wx.getStorage({
  //   key: 'refreshToken',
  //   success: ({ data }) => {
  //     console.log(data, 999)
  //   },
  // }) 异步
  const refreshToken = wx.getStorageSync('refreshToken') // 同步

  // 一套api既有同步(都以sync结尾)  又有异步

  if (statusCode === 401) {
    // 这次401也有可能是因为 refreshToken 过期了
    // 遇到这种情况  只能去登录了
    if (config.url.includes('/refreshToken')) {
      // 这次401是因为 refreshToken 过期了
      // 只能去登录了

      const pages = getCurrentPages() // 获取当前页面栈
      const currentPage = pages[pages.length - 1] // 获取当前页面的信息
      const currentPageRoute = currentPage.route // 获取当前页面的路由路径

      // 被迫去登录了  将来回哪呢???   回原来的页面
      return wx.redirectTo({
        url: '/pages/login/index?redirectURL=/' + currentPageRoute,
      })
    }

    // token过期
    const res = await http({
      url: '/refreshToken',
      method: 'post',
      header: {
        Authorization: refreshToken,
      },
    })
    // res.data.token   后端返回的 需要拼接
    const app = getApp()
    app.setToken(res.data.token, res.data.refreshToken)

    return http({
      ...config,
      header: {
        Authorization: app.token,
      },
    }) // config 就是401那次的请求参数   含有了错误的token
  }

  // 过滤接口返回的数据
  // return res // 不处理  后端返回什么  页面拿到什么
  return data // 后端返回的数据 只给data到页面中
  // 数据剥离  将有用的数据剥离出来给到页面使用
}
/**
 * 挂载方法到全局
 */
wx.http = http
/**
 * 模块导出
 */
export default http
